home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / obrn-a_1.5_src.lha / oberon-a / source3.lha / Source / FPE / FPE.mod < prev    next >
Encoding:
Text File  |  1995-01-26  |  4.3 KB  |  167 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: FPE.mod $
  4.   Description: Frank's Programming Environment
  5.  
  6.                A programming utility designed to integrate seperate
  7.                programming tools (editor, compiler, linker, etc.) into a
  8.                single system.  It also provides a simple source code
  9.                manager.
  10.      Requires: asl.library intuisup.library
  11.  
  12.    Created by: fjc (Frank Copeland)
  13.     $Revision: 1.11 $
  14.       $Author: fjc $
  15.         $Date: 1995/01/26 00:15:33 $
  16.  
  17.   Copyright © 1993-1995, Frank Copeland.
  18.   This file is part of FPE.
  19.   See FPE.doc for conditions of use and distribution.
  20.  
  21.   Log entries are at the end of the file.
  22.  
  23. *************************************************************************)
  24.  
  25. <* STANDARD- *> <*$ NilChk- *>
  26.  
  27. MODULE FPE;
  28.  
  29. IMPORT
  30.   SYS := SYSTEM, Kernel, e := Exec, d := Dos, ASL, is := IntuiSup, Data,
  31.   dlg := FPEDlg, Errors, wb := Workbench, du := DosUtil, u := Utility;
  32.  
  33.  
  34. CONST VersionTag = "$VER: FPE 1.9 (25.1.95)";
  35.  
  36. (* -- Command line template and parsing ------------------------------- *)
  37.  
  38. CONST
  39.  
  40.   template = "PROJECT";
  41.  
  42.   optPROJECT = 0;
  43.   optCount   = 1;
  44.  
  45. VAR
  46.  
  47.   rdArgs : d.RDArgsPtr;
  48.   args : RECORD [2] (d.ArgsStruct)
  49.     project : d.ArgString
  50.   END;
  51.  
  52. (*
  53. ** Lock on starting directory when run from Workbench.
  54. *)
  55.  
  56. VAR
  57.   startDir : d.FileLockPtr;
  58.  
  59.  
  60. (*------------------------------------*)
  61. PROCEDURE* Cleanup (VAR rc : LONGINT);
  62.   VAR oldDir : d.FileLockPtr;
  63. BEGIN (* Cleanup *)
  64.   IF rdArgs # NIL THEN
  65.     d.FreeArgs (rdArgs);
  66.     d.FreeDosObject (d.rdArgs, rdArgs);
  67.     rdArgs := NIL
  68.   END;
  69.   oldDir := d.CurrentDir (startDir);
  70.   d.UnLock (startDir)
  71. END Cleanup;
  72.  
  73.  
  74. (*------------------------------------*)
  75. PROCEDURE Init ();
  76.  
  77.   VAR
  78.     programName, pathPart : e.LSTRPTR;
  79.     programNameIndex : INTEGER;
  80.     ignore : d.FileLockPtr;
  81.     wbStartup : wb.WBStartupPtr;
  82.  
  83. BEGIN (* Init *)
  84.   ASSERT (ASL.base # NIL, 100);
  85.   ASSERT (is.base # NIL, 100);
  86.   startDir := d.Lock (e.EMPTYSTR, d.sharedLock);
  87.   rdArgs := d.AllocDosObjectTags (d.rdArgs, u.end);
  88.   ASSERT (rdArgs # NIL, 132);
  89.  
  90.   Kernel.SetCleanup (Cleanup);
  91.  
  92.   Data.Init();
  93.   dlg.Init();
  94.  
  95.   IF Kernel.fromWorkbench THEN
  96.     wbStartup := SYS.VAL (wb.WBStartupPtr, Kernel.WBenchMsg);
  97.     IF wbStartup.numArgs = 1 THEN
  98.       programNameIndex := 0;
  99.       Data.currentDir := d.DupLock (wbStartup.argList [0].lock);
  100.     ELSIF wbStartup.numArgs = 2 THEN
  101.       programNameIndex := 1;
  102.       Data.currentDir := d.DupLock (wbStartup.argList [1].lock);
  103.     ELSE
  104.       Errors.Abort ("FPE - too many arguments")
  105.     END;
  106.     programName := wbStartup.argList [programNameIndex].name;
  107.     IF programName = NIL THEN Data.programName := "";
  108.     ELSE COPY (programName^, Data.programName)
  109.     END
  110.   ELSE
  111.     IF d.ReadArgs (template, args, rdArgs) = NIL THEN
  112.       ASSERT (d.PrintFault (d.IoErr(), "ReadArgs"));
  113.       HALT (d.warn)
  114.     END;
  115.     programName := d.FilePart (args.project^);
  116.     COPY (programName^, Data.programName);
  117.     pathPart := d.PathPart (args.project^);
  118.     IF pathPart = args.project THEN
  119.       Data.currentDir := d.DupLock (startDir);
  120.     ELSE
  121.       pathPart [0] := 0X;
  122.       Data.currentDir := d.Lock (args.project^, d.sharedLock)
  123.     END;
  124.   END;
  125.   ignore := d.CurrentDir (Data.currentDir);
  126.   ASSERT ( d.NameFromLock ( Data.currentDir,
  127.                             Data.currentPath,
  128.                             LEN(Data.currentPath) - 1) )
  129. END Init;
  130.  
  131.  
  132. (*------------------------------------*)
  133. PROCEDURE Main ();
  134.  
  135. BEGIN (* Main *)
  136.   dlg.Open ();
  137.   dlg.Start ();
  138. END Main;
  139.  
  140. BEGIN (* FPE *)
  141.   Errors.Init;
  142.   Init();
  143.   Main();
  144. END FPE.
  145.  
  146. (***************************************************************************
  147.  
  148.   $Log: FPE.mod $
  149.   Revision 1.11  1995/01/26  00:15:33  fjc
  150.   - Release 1.5
  151.  
  152.   Revision 1.10  1994/09/25  18:20:54  fjc
  153.   - Uses new syntax for external code declarations
  154.  
  155.   Revision 1.5  1994/06/04  23:49:52  fjc
  156.   - Changed to use new Amiga interface
  157.  
  158.   0.6  (06-Sep-93)  General code rework and tidy-up
  159.                     Changed the way module Data handles tools.
  160.                     Changed the tool dialog to conform.
  161.                     General improvements.
  162.   0.5  (25-Jul-93)  First Oberon version, renamed to FPE.
  163.   0.0 - 0.4         Early versions written in Modula 2 and
  164.                     named M2Org.
  165.  
  166. ***************************************************************************)
  167.